/**
 * 垃圾回收
 * 通过自动内存管理实现内存分配和闲置资源回收
 * 
 */

/**
 * 标记清理（ mark-and-sweep）
 * 给变量加标记的方式有很多种。比如，当变量进入上下文时，反转某一位；或者可以维护“在上下
 * 文中”和“不在上下文中”两个变量列表，可以把变量从一个列表转移到另一个列表。标记过程的实现
 * 并不重要，关键是策略。
 */

/**
 * 引用计数
 * 对每个值都记录它被引用的次数
 * 声明变量并给它赋一个引用值时，这个值的引用数为 1。如果同一个值又被赋给另一个变量，那么引用数加 1
 * 类似地，如果保存对该值引用的变量被其他值给覆盖了，那么引用数减 1。当一个值的引用数为 0 时
 * 就说明没办法再访问到这个值了，因此可以安全地收回其内存了
 * 垃圾回收程序下次运行的时候就会释放引用数为 0 的值的内存
 * 会造成严重问题：循环引用
 */

/**
 * 内存管理
 * 1. 通过 const 和 let 声明提升性能
 * 2. 隐藏类和删除操作   V8 在将解释后的 JavaScript代码编译为实际的机器码时会利用“隐藏类”
 * 3. 静态分配与对象池
 */



